package Servidor;

import java.util.ArrayList;
import Servidor.Pregunta;
import Servidor.RespuestaAlumno;

public class ExamenEspecifico {

	private float _nota;
	private ArrayList<Pregunta> _listaPreguntas = new ArrayList<Pregunta>();
	private ArrayList<RespuestaAlumno> _listaRespuestasAlumno = new ArrayList<RespuestaAlumno>();
	private Alumno _alumno;
	private Examen _examen;
	private boolean _terminado;

	public ArrayList<Pregunta> getPreguntas() {
		return _listaPreguntas;
	}

	public ArrayList<Respuesta> getRespuestaAlumno(Pregunta aP) {
		ArrayList<Respuesta> ra = new ArrayList<Respuesta>();

		for (int i = 0; i < _listaRespuestasAlumno.size(); i++) {
			if (_listaRespuestasAlumno.get(i).getPregunta().equals(aP)) {
				ra.add(_listaRespuestasAlumno.get(i).getRespuesta());
			}
		}
		return ra;
	}

	public void incrementarNota() {
		_nota = _nota + 10 / _listaPreguntas.size();
	}

	public void decrementarNota() {//las respuestas incorrectas no restan!!
		;//_nota = _nota - 10 / _listaPreguntas.size();
	}

	public PaqueteCORBA.InfoExamenEspecifico getExamenCompleto() {
		PaqueteCORBA.InfoExamenEspecifico iee = new PaqueteCORBA.InfoExamenEspecifico();

		iee.nota = (_examen.getCorreccion()) ? _nota : -1; //x si todavía no tiene nota
		iee.preguntas = new PaqueteCORBA.InfoPregunta[_listaPreguntas.size()];

		for (int i = 0; i < _listaPreguntas.size(); i++) {
			ArrayList<Respuesta> r = _listaPreguntas.get(i).getRespuestas();
			
			int cont = 0;
			PaqueteCORBA.InfoRespuesta[] ir = new PaqueteCORBA.InfoRespuesta[r.size()];
			
			for (int j = 0; j < r.size(); j++) {
				PaqueteCORBA.InfoRespuesta aux = new PaqueteCORBA.InfoRespuesta();
				aux.correcta = r.get(j).getEsCierta();
				
				boolean marcada = false;
				
				for (int k = 0; k < _listaRespuestasAlumno.size(); k++) {
					if (_listaRespuestasAlumno.get(k).getPregunta() == _listaPreguntas.get(i)) {
						if (_listaRespuestasAlumno.get(k).getRespuesta() == r.get(j))
							marcada = true;
					}
				}
				
				aux.marcada = marcada;
				
				aux.respuesta = r.get(j).getEnunciadoRespuesta();
				ir[cont] = aux;
				cont++;
			}

			iee.preguntas[i] = new PaqueteCORBA.InfoPregunta(_listaPreguntas.get(i).getEnunciadoPregunta(), ir);
		}

		return iee;
	}

	public float getNota() {
		return this._nota;
	}

	public void setNota(float aNota) {
		this._nota = aNota;
	}

	public String getNombreAlumno() {
		return _alumno.getNombre();
	}

	public Alumno getAlumno() {
		return _alumno;
	}

	public ExamenEspecifico(Examen aE) {
		_examen = aE;
		_nota = 0;
	}

	public void addPreguntas(Pregunta[] aPreguntasSeleccionadas) {
		for (int i = 0; i < aPreguntasSeleccionadas.length; i++) {
			_listaPreguntas.add(aPreguntasSeleccionadas[i]);
		}
	}

	public void setAlumno(Alumno aA) {
		_alumno = aA;
	}

	public void addRespuestaAlumno(String aIdPregunta, String aIdRespuesta) {
		Pregunta p = this.findPregunta(aIdPregunta);
                Respuesta r = p.findRespuesta(aIdRespuesta);
		RespuestaAlumno ra = new RespuestaAlumno(this, p, r);
		addRespuestaAlumno(ra);
	}

	public Pregunta findPregunta(String aIdPregunta) {
		for (int i = 0; i < _listaPreguntas.size(); i++) {
			if (_listaPreguntas.get(i).getEnunciadoPregunta().equals(aIdPregunta)) {
				return _listaPreguntas.get(i);
			}
		}
		return null;
	}

	public void addRespuestaAlumno(RespuestaAlumno aRa) {
		_listaRespuestasAlumno.add(aRa);
	}

	public void setListaAlumnos(Alumno aListaAlumnos) {
		this._alumno = aListaAlumnos;
	}

	public Alumno getListaAlumnos() {
		return this._alumno;
	}

	public void setListaExamenes(Examen aListaExamenes) {
		this._examen = aListaExamenes;
	}

	public Examen getExamen() {
		return this._examen;
	}

	void setTerminado(boolean b) {
		_terminado = b;
	}
	
	boolean getTerminado() {
		return _terminado;
	}
}